import unittest
import math

def suma (x,y):
        res= x+y
        return res

def resta (x,y):
        aux1=False
        aux2=False
        res='Error'
        if type(x)!=str:
                aux1=True
        if type(y)!=str:
                aux2=True
        if aux1==True and aux2==True:   
                res=x-y
        return res

def multiplicacion (x,y):
        res= x*y
        return res

def divicion (x,y):
        aux1=False
        aux2=False
        res='Error'
        if type(x)!=str:
                aux1=True
        if type(y)!=str:
                aux2=True
        if aux1==True and aux2==True:   
                if y!=0:
                        res=x/y
                        return res
                else:
                        return 'no se puede dividir por 0'
        else:
                return res
                
def bascara(a,b,c):
	aux1=False
	aux2=False
	aux3=False
	res='Error'
	if type(a)!=str:
		aux1=True
	if type(b)!=str:
		aux2=True
	if type(c)!=str:
		aux3=True
	if aux1==True and aux2==True and aux3==True:   
		b2=multiplicacion(b,b)
		mult=multiplicacion(multiplicacion(4,a),c)
		discrim=resta(b2,mult)
		if discrim>=0:
			raiz=math.sqrt(discrim)
			termino1=suma((-b),raiz)
			termino2=multiplicacion(2,a)
			x1=divicion(termino1,termino2)
			termino1=resta((-b),raiz)
			termino2=multiplicacion(2,a)
			x2=divicion(termino1,termino2)
			return [x1,x2]
		else:
			return 'El resultado es Complejo'
	else:
		return 'No se aceptan letras'


class TestSuma(unittest.TestCase):

    def test(self):
                self.assertEqual(suma(5,4),9)
                self.assertEqual(suma('hola ','que tal?'),'hola que tal?')
                self.assertEqual(suma(-5,4),-1)
                self.assertEqual(suma(5.8,4),9.8)
        
        
class TestResta(unittest.TestCase):

    def test(self):
        self.assertEqual(resta(5,4),1)
        self.assertEqual(resta(0,4),-4)
        self.assertEqual(resta(-5,-4),-1)
        self.assertEqual(resta('hola','a'),'Error')
        
class TestMultiplicacion(unittest.TestCase):

    def test(self):
        self.assertEqual(multiplicacion(5,4),20)
        self.assertEqual(multiplicacion(-5,4),-20)
        self.assertEqual(multiplicacion(-5.5,-4),22)
        self.assertEqual(multiplicacion('hola',3),'holaholahola')
        self.assertEqual(multiplicacion(5,0),0)

        
class TestDivicion(unittest.TestCase):

    def test(self):
        self.assertEqual(divicion(20,4),5)
        self.assertEqual(divicion(2.5,4),0.625)
        self.assertEqual(divicion(20,-4),-5)
        self.assertEqual(divicion('hola',4),'Error')
        self.assertEqual(divicion(20,0),'no se puede dividir por 0')     

			
class TestBascara(unittest.TestCase):
	
    def test(self):
        self.assertEqual(bascara(5,4,0),[0,-0.8])
        self.assertEqual(bascara(8,0,4),'El resultado es Complejo')
        self.assertEqual(bascara(0,-5,-4),['no se puede dividir por 0','no se puede dividir por 0'])
        self.assertEqual(bascara(3,'hola','a'),'No se aceptan letras')   


if __name__ == '__main__':
    unittest.main()
